<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Admin\Manager;
use Auth;
use App\Admin\Role;

class ManagerController extends Controller
{
//    管理员展示
    public function lst(Request $request)
    {
//      如果是POST方式，那么就是数据表格的请求，则返回相应页数的字段信息
        if ($request->isMethod('post')) {
            $pageNum = $request->input('curr');
            $limit = $request->input('nums');
            $count = Manager::count();
            $mess = "";
            $sta = 0;
            $page = $pageNum - 1;
            if ($page != 0) {
                $page = $limit * $page;
            }
            /**
             * 语句1：select * from student limit 9,4
             * 语句2：slect * from student limit 4 offset 9
             * 语句1和2均返回表student的第10、11、12、13行
             * 语句2中的4表示返回4行，9表示从表的第十行开始
             */
            $data = Manager::offset($page)->limit($limit)->get();

            foreach ($data as $val) {
//                是否有外键关系
                if ($val->Role) {
//                  将role_id替换成Role中的role_name
                    $val->role_id = $val->Role->role_name;
                }
            }
            $data = $data->toArray();
//            打包返回数据
            return (compact('data', 'count', 'mess', 'sta'));
//            如果是GET请求则返回视图
        } else return view('admin.manager.lst');
    }

    //这是管理员的添加操作
    public function add(Request $request)
    {
        //如果是get请求，那么就显示视图
        if ($request->isMethod('get')) {
            $Role = Role::get();
            return view('admin.manager.add', compact('Role'));
            //如果是post请求，那么就处理表单传来的数据
        } else {
            $res = $request->Input('add_data');
            $manager = new Manager();
            $manager->insert([
                'status' => $res['status'],
                'username' => $res['username'],
                'gender' => $res['gender'],
                'mobile' => $res['mobile'],
                'email' => $res['email'],
                'role_id' => $res['role_id'],
                'password' => bcrypt($res['password'])
            ]);
            if ($manager) $status = 'ok';
            else $status = 'error';
            return (compact('status'));
        }
    }

    public function del(Request $request)
    {

        /* Model的delete()方法返回bool类型，destory()返回影响的行数 */
        if ($request->input('del_num') == 'one') {
            $id = $request->input('del_id');
            $result = Manager::where('id', $id)->delete();
            if ($result) $status = 'ok';
            else $status = 'error';
            return (compact('status'));
        } elseif ($request->input('del_num') == 'several') {
            //  dd($request->input('del_id'));
//          return an indexed array of values.
            $ids = array_values($request->input('del_id'));
            $nums = Manager::destroy($ids);
            if ($nums) $status = 'ok';
            else $status = 'error';
            return (compact('status', 'nums'));
        }
    }

//    管理员的修改方法
    public function edit(Request $request, $id)
    {
//        如果是GET请求则 1.查询指定id的数据  2.返回带有数据的视图  可以方便用户对照修改
        if ($request->isMethod('get')) {
//         拿到数据库中的信息
            $data = Manager::where('id', $id)->get();
            return view('admin.manager.edit', compact('data', 'id'));
        } else {
//            拿到表单POST请求的数据
            $res = $request->Input('edit_data');
//            拿到要修改的字段信息
            $edit_manager = Manager::where('id', $id);
//            执行更新操作
            $rows = $edit_manager->update([
                'status' => $res['status'],
                'username' => $res['username'],
                'gender' => $res['gender'],
                'mobile' => $res['mobile'],
                'email' => $res['email'],
                'role_id' => $res['role_id'],
                'password' => bcrypt($res['password'])

            ]);
//           如果更新成功 则返回OK
            if ($rows) $status = 'ok';
            else $status = 'error';
            return (compact('status'));
        }
    }
}
